package com.qf.springboot2.conf;

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;

/**
 * 这个类型的对象是通过@Import注解配合使用
 *  当利用Import注解导入这个类型对象时，在spring容器初始化的过程中，会调用这个类型对象的registerBeanDefinitions方法
 *      并且将这个方法注册到registry的bean信息最终创建成spring容器中的bean对象
 *
 *   java类 --> Class(用来描述java中的一个类的。比如类型、字段、方法等信息) ---> java实例对象（javabean）
 *
 *   java类-->Class-->  BeanDefinition（用来描述spring中的一个bean。比如：是否单例、是否懒加载、是否是FacotryBean类型、初始化方法、销毁方法等..）   ---> spring容器中的Bean对象（springbean）
 */
public class StuBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

        //向spring中注册BeanDefinition信息，最后spring会通过这个BeanDefinition信息，将其变成spring容器中的一个bean对象
        BeanDefinition bd = new RootBeanDefinition();
        bd.setBeanClassName("com.qf.springboot2.domain.Student");

        registry.registerBeanDefinition("stu",bd);
    }
}
